package pers.dawnyang.modular.system.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import pers.dawnyang.common.domain.entity.SysConfig;
import pers.dawnyang.common.enums.ConfigEnum;
import pers.dawnyang.config.cache.ConfigUtils;
import pers.dawnyang.modular.system.mapper.SysConfigMapper;
import pers.dawnyang.modular.system.service.ConfigService;

/**
 * @author dawn
 * @date 2021/04/19
 */
@Service
public class ConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements ConfigService {

    @Autowired
    private SysConfigMapper sysConfigMapper;

    @Override
    public void initConfigData() {
	List<SysConfig> configs = ConfigEnum.getConfigs();
	LambdaQueryWrapper<SysConfig> lqw1 = new LambdaQueryWrapper<>();
	lqw1.eq(SysConfig::getStatus, 1);
	List<SysConfig> lastConfigs = sysConfigMapper.selectList(lqw1);
	List<SysConfig> lastSame = new ArrayList<>();
	for (SysConfig sc : configs) {
	    for (SysConfig lastsc : lastConfigs) {
		if (sc.getConfigName().equals(lastsc.getConfigName())
			&& sc.getConfigCode().equals(lastsc.getConfigCode())
			&& sc.getRemark().equals(lastsc.getRemark())) {
		    lastSame.add(lastsc);
		}
	    }
	}
	sysConfigMapper.delete(null);
	for (SysConfig sc : configs) {
	    sysConfigMapper.insert(sc);
	}
	for (SysConfig sc : lastSame) {
	    LambdaQueryWrapper<SysConfig> lqw2 = new LambdaQueryWrapper<>();
	    lqw2.eq(SysConfig::getConfigCode, sc.getConfigCode());
	    sysConfigMapper.update(sc, lqw2);
	}

    }

    @Override
    public void initConfigCache() {
	ConfigUtils.clearConfigCache();
	List<SysConfig> newList = sysConfigMapper.selectList(null);
	for (SysConfig sysConfig : newList) {
	    ConfigUtils.setValue(sysConfig.getConfigCode(), sysConfig.getConfigValue());
	}

    }

}
